
// 自定义Promise构造函数, 并指定一个参数：excutor 执行器
function Promise(excutor){
    // 初始化状态属性值为pending
    this.PromiseState = "pending";
    // 初始化结果属性值为undefined
    this.PromiseResult = undefined;
    // 声明一个属性用于存放then没有执行的回调函数
    this.callbacks = [];
    
    // 声明内部成功函数
    const success = (v) => {
        this.PromiseState = "fulfilled";
        this.PromiseResult = v;
        // 询问callbacks属性中是否存在需要执行回调（因为延迟导致没有执行的）
        if(this.callbacks.length > 0){
            this.callbacks.forEach(item =>{
                item.ok(this.PromiseResult);
            });
        }
    }

    // 声明内部失败函数
    const error = (r) => {
        this.PromiseState = "rejected";
        this.PromiseResult = r;
        // 询问callbacks属性中是否存在需要执行回调（因为延迟导致没有执行的）
        if(this.callbacks.length > 0){
            this.callbacks.forEach(item =>{
                item.ng(this.PromiseResult);
            });
        }
    }
    try {
        // 调用执行器
        excutor(success,error);
    } catch (err) {
        error(err.message);
    }
    
}

// 为当前自定义Promise构造函数的原型上添加then方法
Promise.prototype.then = function(onFulfilled, onRejected){
    // 根据当前promise对象的状态属性值来执行对应的回调函数
    if(this.PromiseState == "fulfilled"){
        onFulfilled(this.PromiseResult);
    }
    if(this.PromiseState == "rejected"){
        onRejected(this.PromiseResult);
    }
    // 判断当前promise对象的状态是否是等待pending
    if(this.PromiseState == "pending"){
        // 将当前的回调函数保留下来，存到callbacks属性中
        this.callbacks.push({
           ok:onFulfilled,
           ng:onRejected 
        });
    }
}



